package com.study.happystudy.mapper;

import com.study.happystudy.po.Course;
import com.study.happystudy.po.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface CourseMapper {

    // 新建课程,返回主键
    void insertCourse(
            @Param("userId") int userId,
            @Param("courseName") String courseName,
            @Param("courseDescription") String courseDescription,
            @Param("imgUrl") String imgUrl,
            @Param("startTime") String startTime,
            @Param("endTime") String endTime,
            @Param("duration") int duration,
            @Param("grade") int grade,
            @Param("subjectId") int subjectId,
            @Param("classTime") String classTime,
            @Param("type") String type
    );

    // 根据id删除课程
    void deleteCourseById(@Param("courseId") int courseId);

    // 老师对课程信息修改(除id、任课老师外)
    void updateCourse(
            @Param("courseId") int courseId,
            @Param("courseName") String courseName,
            @Param("courseDescription") String courseDescription,
            @Param("imgUrl") String imgUrl,
            @Param("startTime") String startTime,
            @Param("endTime") String endTime,
            @Param("duration") int duration,
            @Param("grade") int grade,
            @Param("subjectId") int subjectId,
            @Param("classTime") String classTime,
            @Param("type") String type
    );

    // 查询报名该课程的学生(按照加入日期排序)
    List<User> selectStudentsByCourseId(@Param("courseId") int courseId);

    // 增加学生到课程
    void insertStudentToCourse(@Param("courseId") int courseId, @Param("userId") int userId);

    // 从课程中删除学生
    void deleteStudentFromCourse(@Param("courseId") int courseId, @Param("userId") int userId);

    // 根据科目返回课程列表(开课时间排序)
    List<Course> selectCoursesBySubject(@Param("subjectId") int subjectId);

    // 根据年级、科目返回课程列表(开课时间排序)
    List<Course> selectCoursesByGradeAndSubject(@Param("grade") int grade, @Param("subject_id") int subjectId);

    // 根据年级返回课程列表(开课时间排序)
    List<Course> selectCoursesByGrade(@Param("grade") int grade);

    // 搜索框:通过搜索的关键词来显示出包含关键词的课程名、课程简介、老师名字的课程
    List<Course> searchByTerm(@Param("searchTerm") String searchTerm);

    // 通过老师姓名查的课程
    List<Course> searchCourseByTeacherName(@Param("teacherName") String teacherName);

    // 查找某个学生在不在某课程中, 返回的是数量
    int isExist(@Param("userId") int userId, @Param("courseId") int courseId);

    // 返回用户收藏的所有课程根据科目
    List<Course> getUserFavoritesBySubject(@Param("userId") int userId, @Param("subjectId") int subjectId);

    //返回用户收藏的所有课程根据年级
    List<Course> getUserFavoritesByGrade(@Param("userId") int userId, @Param("grade") int grade);

    //    返回用户收藏的所有课程根据根据年级和科目
    List<Course> getUserFavoritesBySubjectAndGrade(@Param("userId") int userId, @Param("subjectId") int subjectId, @Param("grade") int grade);


    Course findCourseById(@Param("courseId") int courseId);

    // 用户收藏课程
    void collectCourses(@Param("userId") int userId, @Param("courseId") int courseId);

    // 返回用户收藏的所有课程
    List<Course> getUserFavorites(@Param("userId") int userId);

    // 某个课程是否被收藏
    boolean isFavorites(@Param("userId") int userId, @Param("courseId") int courseId);

    void cancelCollectCourses(@Param("userId") int userId, @Param("courseId") int courseId);

    List<Course> getAllCourses();
    List<Course> selectCoursesByUserId(@Param("userId") int userId);
}
